home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
drdobbs
/
1987
/
11
/
letters.exp
< prev
next >
Wrap
Text File
|
1987-10-08
|
3KB
|
85 lines
moveq.1 #10,d1 if < 10, simple byte move is faster
cmp.1 d1,d0
blt.s tinymove
move.w a0,d1
add.w a1,d1
1sr.b #1,d1 is one address odd and the other even?
bcs.s bytemov if so, cannot use long moves
asr.1 #1,d0 convert byte count to word count
move.w a0,d1
roxr.w #1,d1 bit 15 set on odd count, clear on even
bcc.s wordmov even addresses, go!
eori.w #$8000,d1 odd addresses, make odd count even & even odd
bpl.s align was byte count originally even?
subq.1 #1,d0 if so, must fix word count
alin move.b (a0)+,(a1)+ now fix odd byte
wordmove ars.1 #1d0 convert word count to long word count
bcc.s longmov any odd byte has been moved
move.w (a0)+,(a1)+ move extra word
longmov asr.1 #1,d0
bcc.s lng2mov
move.1 (a0)+,(a1)+
lng2mov asr.1 #1,d0
bcc.s lng4mov
move.1 (a0)+,(a1)+
move.1 (a0)+,(a1)+
lng4mov ars.1 #1,d0
bcs.s hack
beq.s chkodd
subq.1 #1,d0
quikmov move.1 (a0)+,(a1)+
move.1 (a0)+,(a1)+
move.1 (a0)+,(a1)+
move.1 (a0)+,(a1)+
hack move.1 (a0)+,(a1)+
move.1 (a0)+,(a1)+
move.1 (a0)+,(a1)+
move.1 (a0)+,(a1)+
dbf d0,quikmov
chkodd move.w d1,d1
bpl.s exit
move.1 (a0)+,(a1)+
exit rts
bytemov asr.1 #1,d0
bcc.s byt2mov
move.b (a0)+,(a1)+
byt2mov asr.1 #1,d0
bcc.s byt4mov
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
byt4mov asr.1 #1,d0
bcs.s hack2
subq.1 #1,d0 do not need beq here since count always > 8
byt8mov move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
hack2 move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
dbf d0,byt8mov
rts
loop move.b (a0)+,(a1)+
tinymov dbf d0,loop
rts
Example 1